package com.feicheng.lanniao.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.feicheng.lanniao.entity.User;
import com.feicheng.lanniao.exception.SystemException;
import com.feicheng.lanniao.result.ResultInfo;
import com.feicheng.lanniao.service.IUserService;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author cailongyang
 * @since 2021-07-13
 */
@RestController
@RequestMapping("/subscribe/user")
public class UserController {
	@Autowired
	IUserService iUserService;
	
	/**
	 * パラメータに基づいてユーザーを検索する、パラメータがない場合は、すべてのユーザーを検索する
	 * @param currentPage
	 * @param pageSize
	 * @param account
	 * @param tel
	 * @param secId
	 * @param nickName
	 * @return ページ付けされた検索されたユーザー
	 */
	@GetMapping("/list")
	public ResultInfo selectUser(
			Integer currentPage, 
			Integer pageSize, 
			String account, 
			String tel, 
			String secId) {

		
		return iUserService.selectUser(currentPage, pageSize, account, tel, secId);
	}

	
	/**
	 * ユーザーIDに基づいてユーザーと対応するロールと権限を検索する
	 * @param userId
	 * @return 検索された結果
	 */
	@GetMapping("/info")
	public ResultInfo selectUserById(Integer userId) {

		// 校验用户ID
		if (null == userId) {
			throw new SystemException("用户ID缺失");
		}
		
		// 返回查询到的用户
		return iUserService.selectUserById(userId);
	}

	
	/**
	 * ユーザーと対応するロールを追加する
	 * @param user
	 * @param roles
	 * @return 追加操作は成功したか
	 */
	@PostMapping("/info")
	@Transactional
	public ResultInfo addUser(User user, String roles) {
		if (!StringUtils.hasLength(user.getAccount()) || !StringUtils.hasLength(user.getPassword())
				|| !StringUtils.hasLength(user.getTel())
				|| !StringUtils.hasLength(user.getSecId())) {
			throw new SystemException("保证用户信息完整");
		}
		
		if (!StringUtils.hasLength(roles)) {
			throw new SystemException("用户角色信息缺失");
		}
		return ResultInfo.success(iUserService.addUser(user, roles));
	}

	
	/**
	 * ユーザーと対応するロールを更新する
	 * @param user
	 * @param roles
	 * @return 更新操作は成功したか
	 */
	@PutMapping("/info")
	@Transactional
	public ResultInfo updateUser(User user, String roles) {
		if (null == user.getUserId()) {
			throw new SystemException("用户ID缺失");
		}
		
		return ResultInfo.success(iUserService.updateUser(user, roles));
	}
}
